perm filename SAY2.SAI[4,ALS] blob
sn#052859 filedate 1973-07-06 generic text, type T, neo UTF8
00010 BEGIN "SAY"
00020 DEFINE ⊂="COMMENT"; ⊂ 7/1/73 Runs SIG from FIX output;
00030
00040 REQUIRE "SIG" LOAD_MODULE;
00050 REQUIRE "BLOCKS.HDR" SOURCE_FILE;
00060 EXTERNAL FORTRAN PROCEDURE SIG(REFERENCE INTEGER P);
00070 INTEGER ARRAY LFILE[0:'177];
00080 INTERNAL INTEGER ARRAY INDATA[0:4000];
00090 INTERNAL INTEGER H,I,J,K,L,M,N,P,NF;
00100 INTERNAL INTEGER FLAG,UPCNT,TABTOT;
00110 INTERNAL INTEGER SEGC,INTOT,SEGTOT,HINT,BPT,PHW,SMOCNT;
00120 INTEGER NEW,OLD,SUM,S1,S2,S3,S4,N1,N2,N3,N4,RL;
00130 INTEGER HINCNT,HCOUNT,HINDEX,EOF,EOFA,EOFB,BRK;
00150 INTEGER CHAN1,CHAN2,CHAN3,CHAN4,CHAN5;
00160 STRING READ1,FILEL,FILEI,TFILE,TFILEI,FILLST,PREHINT;
00170 LABEL START,ZZZZ,ZZZ,ZZ;
00190 DEFINE ⊂="COMMENT",CR="'15",LF="'12",TB="'11";
00200 DEFINE CRLF="CR&LF", CRLF0="CR&'177&'21"; ⊂ FOR CRLF W/O FORM FEED;
00210 DEFINE TABSIZ="256",TABNUM="16",ARRSIZ="4096";
00220 INTERNAL INTEGER ARRAY LRN[0:ARRSIZ];
00230 INTERNAL INTEGER ARRAY RES,USE[0:TABSIZ];
00240 BOOLEAN ER;
00250
00260 STRING PROCEDURE HEADER;
00270 BEGIN "HEADER"
00280 STRING H1; INTEGER I,J,K;
00290 IF HCOUNT>0 THEN BEGIN HCOUNT←HCOUNT-1; HINCNT←HINCNT+1;
00300 RETURN(PREHINT) END ELSE WHILE HCOUNT=0 DO BEGIN "XX"
00310 I←LFILE[HINDEX]; K←LDB(POINT(12,I,23)); J←SEGC-K;
00320 IF I=0 THEN BEGIN PREHINT←"NU"; HCOUNT←999; RETURN(PREHINT) END;
00330 IF J ≥ 0 THEN BEGIN "LATCH"
00340 H1←CVXSTR(LDB(POINT(12,I,11)) LSH 24);
00400 IF H1≠0 THEN BEGIN
00410 PREHINT←H1; HCOUNT←LDB(POINT(12,I,35));
00420 HCOUNT←HCOUNT-J; HINDEX←HINDEX+1; HINCNT←HINCNT+1;
00430 RETURN(PREHINT); DONE END
00440 ELSE BEGIN PREHINT←"NU"; HCOUNT←LDB(POINT(12,I,35));
00450 HCOUNT←HCOUNT-J; HINDEX←HINDEX+1; RETURN(PREHINT); DONE; END;
00460 END "LATCH";
00470 PREHINT←"NU"; RETURN(PREHINT); END "XX";
00480 END "HEADER";
00490
00500 PROCEDURE SMOOTH;
00510 BEGIN "SMOOTH"
00520 S1←S2←S3←S4←'200; SMOCNT←SMOCNT+1; END "SMOOTH";
00530
00540 PROCEDURE UPDATE;
00550 BEGIN "UPDATE"
00590
00600 OUTSTR(CRLF);
00610 CHAN1←GETCHAN; CLOSE(CHAN1); OPEN(CHAN1,"DSK",'10,10,2,0,0,EOF);
00620 ENTER(CHAN1,"RES.DAT",0); RENAME(CHAN1,"RES.OLD",0,0); CLOSE(CHAN1);
00630 OPEN(CHAN1,"DSK",'10,10,0,0,0,EOF); LOOKUP(CHAN1,"RES.OLD",0);
00670 CHAN3←GETCHAN; CLOSE(CHAN3); OPEN(CHAN3,"DSK",'10,0,10,0,0,0);
00680 ENTER(CHAN3,"RES.DAT",0);
00700 CHAN4←GETCHAN; CLOSE(CHAN4); OPEN(CHAN4,"DSK",'10,0,10,0,0,0);
00710 ENTER(CHAN4,"USE.DAT",0);
00720
00730 FOR I←0 STEP 1 UNTIL TABNUM DO BEGIN
00740 IF NAMES[I]=0 THEN DONE;
00750 J←I*TABSIZ;
00760 ARRYIN(CHAN1,RES[0],TABSIZ);
00780
00790 FOR K←0 STEP 1 UNTIL TABSIZ-1 DO BEGIN
00800 L←J+K;
00810
00820 NEW←LDB(POINT(9,LRN[L],8));
00830 OLD←LDB(POINT(9,RES[K],8));
00840 SUM←S1←(OLD LSH 5)+NEW;
00850
00860 NEW←LDB(POINT(9,LRN[L],17));
00870 OLD←LDB(POINT(9,RES[K],17));
00880 S2←(OLD LSH 5)+NEW; SUM←SUM+S2;
00890
00900 NEW←LDB(POINT(9,LRN[L],26));
00910 OLD←LDB(POINT(9,RES[K],26));
00920 S3←(OLD LSH 5)+NEW; SUM←SUM+S3;
00930
00940 NEW←LDB(POINT(9,LRN[L],35));
00950 OLD←LDB(POINT(9,RES[K],35));
00960 S4←(OLD LSH 5)+NEW; SUM←SUM+S4;
00970
00980 RES[K]←((S1 LSH -5) LSH 27)+((S2 LSH -5) LSH 18)
00990 +((S3 LSH -5) LSH 9)+(S4 LSH -5);
01000 LRN[L]←LRN[L] LAND '037037037037;
01010 S1←(S1 LSH 9)%SUM; S2←(S2 LSH 9)%SUM;
01020 S3←(S3 LSH 9)%SUM; S4←(S4 LSH 9)%SUM;
01030 IF S1=512 THEN S1←511 ELSE IF S2=512 THEN S2←511 ELSE
01040 IF S3=512 THEN S3←511 ELSE IF S4=512 THEN S4←511;
01050 IF SUM=0 THEN SMOOTH;
01060 USE[K]←(S1 LSH 27)+(S2 LSH 18)+(S3 LSH 9) +S4;
01070 END;
01080
01090 ARRYOUT(CHAN3,RES[0],TABSIZ); ARRYOUT(CHAN4,USE[0],TABSIZ);
01100 OUTSTR("Table "&CVXSTR(NAMES[I])&" has been updated with "
01110 &CVS(SMOCNT)&" items smoothed"&CRLF); SMOCNT←0;
01120 END;
01130 CLOSE(CHAN1); CLOSE(CHAN3); CLOSE(CHAN4);
01160 OUTSTR("Update completed."&CRLF);
01170 END "UPDATE";
00010 STDBRK(1);
00020 SETBREAK(14,"∃",NULL,"INS");
00030
00040 FILEL←"LIST1";
00050 FILEI←"TOO1.DAT[1,THO]";
00060 CHAN1←1; CHAN2←2; CHAN3←3; CHAN4←4; CHAN5←5;
00070 HEADIN;
00080 FOR I←0 STEP 1 UNTIL 15 DO IF NAMES[I]=0 THEN DONE; TABTOT←I*TABSIZ;
00090 OUTSTR("TABTOT= "&CVS(TABTOT)&CRLF);
00100 FLAG←0; SIG(P); FLAG←-1; ⊂ To preset addrssses in SIG;
00110 CLOSE(CHAN1); OPEN(CHAN1,"DSK",'10,10,0,0,0,EOF);
00120 LOOKUP(CHAN1,"LRN.DAT",0);ARRYIN(CHAN1,LRN[0],TABTOT);CLOSE(CHAN1);
00130 FILEL←STRIN("Data file list (LIST1) = ");
00140 IF FILEL="" THEN FILEL←"LIST1";
00150 CLOSE(CHAN5); OPEN(CHAN5,"DSK",1,2,0,3500,BRK,EOFA);
00160 LOOKUP(CHAN5,FILEL,ER);
00170 WHILE ER DO BEGIN OUTSTR(CRLF&"Can't find "&FILEL&" File = ");
00180 LOOKUP(CHAN5,FILEL←INCHWL,ER); END; EOFA←0;
00190 FILLST←INPUT(CHAN5,14); EOFA←0; RL←0;
00210 WHILE EOFA=0 DO BEGIN "LISTREAD"
00220 HINDEX←21; HCOUNT←HINCNT←0;
00230 FILEI←SCAN(FILLST,1,J); IF FILEI="" THEN DONE;
00250
00260 CLOSE(CHAN4); OPEN(CHAN4,"DSK",'10,10,0,0,0,EOF);
00280 LOOKUP(CHAN4,FILEI,0); IF EOF≠0 THEN DONE;
00300 ARRYIN(CHAN4,LFILE[0],'200); ⊂ Input header;
00310 SEGTOT←(LFILE[0]*6)%256;
00320 OUTSTR(FILEI&" "&CVS(SEGTOT)&" seg. ");
00330 ARRYIN(CHAN4,INDATA[0],SEGTOT*4); CLOSE(CHAN4);
00350 BPT←POINT(6,INDATA[0],-1); HINDEX←21; HCOUNT←HINCNT←0;
00370
00380 FOR SEGC←1 STEP 1 UNTIL SEGTOT DO BEGIN
00390 ZZ: READ1←HEADER;
00400 J←CVSIX(READ1);
00410 FOR I←0 STEP 1 UNTIL 63 DO BEGIN IF PHLIST[I]=0 THEN BEGIN
00420 OUTSTR("Hint not identified for segment = "&READ1
00430 &" " &CVS(SEGC)&CRLF);DONE END;
00440 IF PHLIST[I]=J THEN BEGIN HINT←HLIST[I]; PHW←J; DONE ; END;
00450 END;
00460
00470 FOR P←0 STEP 1 UNTIL 23 DO INDAT[P]←ILDB(BPT);
00480 ZZZZ: IF PHW≠CVSIX("NU") THEN SIG(P);
00490 ZZZ: END;
00500
00510 OUTSTR(CVS(HINCNT)&" hints . ");
00520 IF RL=0 THEN RL←1 ELSE BEGIN RL←0; OUTSTR(CRLF); END;
00530 IF EOFA≠0 THEN DONE;
00540 END "LISTREAD";
00550 UPDATE;
00560 CLOSE(CHAN1); OPEN(CHAN1,"DSK",'10,0,10,0,0,EOF);
00570 ENTER(CHAN1,"LRN.DAT",0);
00580 ARRYOUT(CHAN1,LRN[0],TABTOT); CLOSE(CHAN1); RELEASE(CHAN1);
00590
00600 OUTSTR("Tables saved"&CRLF);
00610 END "SAY";